suppressPackageStartupMessages({
  library(tweenr)
  library(gganimate)
  library(tidyverse)
})
windowsFonts(Raleway = windowsFont("Raleway"))
pal1 <- c("#969457", "#357c57")
pal2 <- c("#b7e972", "#377368")

Pesqueros

Arribos CA

Paleta1

read_csv("GSB_Landings.csv", col_types = cols()) %>% 
  gather(Procedencia, Captura, -Year) %>% 
  ggplot(aes(x = Year, y = Captura, color = Procedencia)) +
  geom_line(size = 1.1) +
  theme_classic() +
  theme(legend.justification = c(0.5, 0.5),
        legend.position = c(0.7, 0.7),
        text = element_text(family = "Raleway", size = 18)) +
  scale_color_manual(values = pal1) +
  labs(x = "Año", y = "Arribos (Toneladas)") +
  scale_x_continuous(breaks = seq(1920, 2010, 10), minor_breaks = NULL) +
  scale_y_continuous(breaks = seq(0, 375, 75), minor_breaks = NULL)

ggsave("Paleta1.tiff", dpi = 600, width = 16, height = 8)

Paleta 2

read_csv("GSB_Landings.csv", col_types = cols()) %>% 
  gather(Procedencia, Captura, -Year) %>% 
  ggplot(aes(x = Year, y = Captura, color = Procedencia)) +
  geom_line(size = 1.1) +
  theme_classic() +
  theme(legend.justification = c(0.5, 0.5),
        legend.position = c(0.7, 0.7),
        text = element_text(family = "Raleway", size = 20)) +
  scale_color_manual(values = pal2) +
  labs(x = "Año", y = "Arribos comerciales de Mero Gigante en California \n(Toneladas)") +
  scale_x_continuous(breaks = seq(1920, 2010, 10), minor_breaks = NULL) +
  scale_y_continuous(breaks = seq(0, 375, 75), minor_breaks = NULL)

ggsave("Paleta2.tiff", dpi = 600, width = 16, height = 8)

Paleta 1 animada

plot_data <- read_csv("GSB_Landings.csv", col_types = cols()) %>% 
  gather(Procedencia, Arribos, -Year) %>% 
  mutate(ease = "linear", x = Year) %>% 
  rename(y = Arribos, id = Procedencia, time = Year) 
tween_plot <- plot_data %>%
  tween_elements(., "time", "id", "ease", nframes = 250) %>%   #using tweenr!
  mutate(year = round(time), id = .group) %>%
  left_join(plot_data, by = c("time", "y", "x", "id")) %>% 
  rename(Procedencia = id) %>% 
  ggplot(aes(x = x, y = y, frame = .frame, color = Procedencia)) +
  geom_path(aes(group = Procedencia, cumulative = T), size = 1.1) +
  theme_classic() +
  theme(legend.justification = c(0.5, 0.5),
        legend.position = c(0.7, 0.7),
        text = element_text(family = "Raleway", size = 18)) +
  scale_color_manual(values = pal1) +
  labs(x = "Año", y = "Arribos (Toneladas)") +
  scale_x_continuous(breaks = seq(1920, 2010, 10), minor_breaks = NULL) +
  scale_y_continuous(breaks = seq(0, 375, 75), minor_breaks = NULL)
Column `id` joining factor and character vector, coercing into character vectorIgnoring unknown aesthetics: cumulative
gganimate(tween_plot, title_frame = FALSE, interval = 0.001, "Landings_CA.gif", ani.width = 800, ani.height = 500)

Arribos Mexico

read_csv("GSB_Landings_mx.csv", col_types = cols()) %>% 
  ggplot(aes(x = Ano, y = Arribos)) +
  geom_line(size = 1.1, color = "#357c57") +
  geom_point(size = 2, color = "#357c57") +
  theme_classic() +
  theme(legend.justification = c(0.5, 0.5),
        legend.position = c(0.7, 0.7),
        text = element_text(family = "Raleway", size = 20)) +
  labs(x = "Año", y = "Arribos comerciales de Mero Gigante \n(Toneladas)")
ggsave("Mex.tiff", dpi = 600, width = 16, height = 8)

Biologicos

bio <- read.csv(file = "records.csv", stringsAsFactors = F) %>% 
  select(Species, Site, Sale_price_pkg, Fish_Market_name, Catch_site, Pesca_Objetivo, Weight, Total_Length, Head_Length, Weight_notes, Otoliths, Collector) %>% 
  magrittr::set_colnames(value = tolower(colnames(.)))

Registros por persona

colectores <- group_by(bio, site, collector) %>% 
  count() %>% 
  ggplot(aes(x = collector, y = n)) +
  geom_col(aes(fill = site), color = "black") +
  cowplot::theme_cowplot() +
  theme(legend.justification = c(1, 1),
        legend.position = c(0.9, 0.9)) +
  scale_fill_brewer(palette = "Set1") +
  ggExtra::rotateTextX()
plotly::ggplotly(colectores)
model <- lm(log10(weight)~log10(total_length), data = bio)
tidy_model <- broom::tidy(model)
glance_model <- broom::glance(model)
text_linear <- c("log10(TW) = -5.0363 + log10(TL)^3.1198")
text_exp <- c("TW = 10^(-5.0363)*(TL^3.1198)")
line <- data.frame(x = seq(0, 210, by = 1)) %>% 
  mutate(y = 10^(-5.0363)*(x^3.1198))
LW <- filter(bio, !is.na(total_length),
             !is.na(weight)) %>%  
  mutate(weight_notes = ifelse(is.na(weight_notes), "No notes", weight_notes),
         site = ifelse(is.na(site), "Missing", site)) %>% 
  ggplot(aes(x = total_length, y = weight)) +
  geom_point(size = 2, alpha = 0.5, aes(color = weight_notes, site = site, otolitos = otoliths)) +
  scale_color_brewer(palette = "Set1", direction = -1) +
  labs(x = "Total Length (cm)", y = "Total Weight (Kg)") +
  ggtitle(text_exp) +
  geom_line(data = line, aes(x = x, y = y))
Ignoring unknown aesthetics: site, otolitos
plotly::ggplotly(LW)
LW <- filter(bio, !is.na(total_length),
             !is.na(weight)) %>%  
  mutate(weight_notes = ifelse(is.na(weight_notes), "No notes", weight_notes),
         site = ifelse(is.na(site), "Missing", site)) %>% 
  ggplot(aes(x = log10(total_length), y = log10(weight), color = weight_notes, site = site, otolitos = otoliths, Weight = weight, Length = total_length)) +
  geom_point(size = 2, alpha = 0.5) +
  scale_color_brewer(palette = "Set1", direction = -1) +
  labs(x = "Total Length (cm)", y = "Total Weight (Kg)") +
  ggtitle(text_linear) +
  geom_abline(slope = 3.1198, intercept = -5.0363)
plotly::ggplotly(LW)
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6DQogICAgaHRtbF9ub3RlYm9vazoNCiAgICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgICAgdG9jOiB5ZXMNCiAgICAgIHRvY19mbG9hdDogeWVzDQotLS0NCg0KYGBge3J9DQpzdXBwcmVzc1BhY2thZ2VTdGFydHVwTWVzc2FnZXMoew0KICBsaWJyYXJ5KHR3ZWVucikNCiAgbGlicmFyeShnZ2FuaW1hdGUpDQogIGxpYnJhcnkodGlkeXZlcnNlKQ0KfSkNCg0Kd2luZG93c0ZvbnRzKFJhbGV3YXkgPSB3aW5kb3dzRm9udCgiUmFsZXdheSIpKQ0KYGBgDQoNCmBgYHtyfQ0KcGFsMSA8LSBjKCIjOTY5NDU3IiwgIiMzNTdjNTciKQ0KDQpwYWwyIDwtIGMoIiNiN2U5NzIiLCAiIzM3NzM2OCIpDQpgYGANCg0KIyBQZXNxdWVyb3MNCg0KIyMgQXJyaWJvcyBDQQ0KDQojIyMgUGFsZXRhMQ0KDQpgYGB7ciwgZmlnLndpZHRoID0gOCwgZmlnLmhlaWdodCA9IDR9DQpyZWFkX2NzdigiR1NCX0xhbmRpbmdzLmNzdiIsIGNvbF90eXBlcyA9IGNvbHMoKSkgJT4lIA0KICBnYXRoZXIoUHJvY2VkZW5jaWEsIENhcHR1cmEsIC1ZZWFyKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IFllYXIsIHkgPSBDYXB0dXJhLCBjb2xvciA9IFByb2NlZGVuY2lhKSkgKw0KICBnZW9tX2xpbmUoc2l6ZSA9IDEuMSkgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICB0aGVtZShsZWdlbmQuanVzdGlmaWNhdGlvbiA9IGMoMC41LCAwLjUpLA0KICAgICAgICBsZWdlbmQucG9zaXRpb24gPSBjKDAuNywgMC43KSwNCiAgICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiUmFsZXdheSIsIHNpemUgPSAxOCkpICsNCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IHBhbDEpICsNCiAgbGFicyh4ID0gIkHDsW8iLCB5ID0gIkFycmlib3MgY29tZXJjaWFsZXMgZGUgTWVybyBHaWdhbnRlIGVuIENhbGlmb3JuaWEgKFRvbmVsYWRhcykiKSArDQogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMTkyMCwgMjAxMCwgMTApLCBtaW5vcl9icmVha3MgPSBOVUxMKSArDQogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMzc1LCA3NSksIG1pbm9yX2JyZWFrcyA9IE5VTEwpDQoNCmdnc2F2ZSgiUGFsZXRhMS50aWZmIiwgZHBpID0gNjAwLCB3aWR0aCA9IDE2LCBoZWlnaHQgPSA4KQ0KYGBgDQoNCiMjIyBQYWxldGEgMg0KDQpgYGB7ciwgZmlnLndpZHRoID0gOCwgZmlnLmhlaWdodCA9IDR9DQpyZWFkX2NzdigiR1NCX0xhbmRpbmdzLmNzdiIsIGNvbF90eXBlcyA9IGNvbHMoKSkgJT4lIA0KICBnYXRoZXIoUHJvY2VkZW5jaWEsIENhcHR1cmEsIC1ZZWFyKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IFllYXIsIHkgPSBDYXB0dXJhLCBjb2xvciA9IFByb2NlZGVuY2lhKSkgKw0KICBnZW9tX2xpbmUoc2l6ZSA9IDEuMSkgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICB0aGVtZShsZWdlbmQuanVzdGlmaWNhdGlvbiA9IGMoMC41LCAwLjUpLA0KICAgICAgICBsZWdlbmQucG9zaXRpb24gPSBjKDAuNywgMC43KSwNCiAgICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiUmFsZXdheSIsIHNpemUgPSAyMCkpICsNCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IHBhbDIpICsNCiAgbGFicyh4ID0gIkHDsW8iLCB5ID0gIkFycmlib3MgY29tZXJjaWFsZXMgZGUgTWVybyBHaWdhbnRlIGVuIENhbGlmb3JuaWEgXG4oVG9uZWxhZGFzKSIpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgxOTIwLCAyMDEwLCAxMCksIG1pbm9yX2JyZWFrcyA9IE5VTEwpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAzNzUsIDc1KSwgbWlub3JfYnJlYWtzID0gTlVMTCkNCg0KZ2dzYXZlKCJQYWxldGEyLnRpZmYiLCBkcGkgPSA2MDAsIHdpZHRoID0gMTYsIGhlaWdodCA9IDgpDQoNCmBgYA0KDQojIyMgUGFsZXRhIDEgYW5pbWFkYQ0KDQpgYGB7cn0NCnBsb3RfZGF0YSA8LSByZWFkX2NzdigiR1NCX0xhbmRpbmdzLmNzdiIsIGNvbF90eXBlcyA9IGNvbHMoKSkgJT4lIA0KICBnYXRoZXIoUHJvY2VkZW5jaWEsIEFycmlib3MsIC1ZZWFyKSAlPiUgDQogIG11dGF0ZShlYXNlID0gImxpbmVhciIsIHggPSBZZWFyKSAlPiUgDQogIHJlbmFtZSh5ID0gQXJyaWJvcywgaWQgPSBQcm9jZWRlbmNpYSwgdGltZSA9IFllYXIpIA0KDQp0d2Vlbl9wbG90IDwtIHBsb3RfZGF0YSAlPiUNCiAgdHdlZW5fZWxlbWVudHMoLiwgInRpbWUiLCAiaWQiLCAiZWFzZSIsIG5mcmFtZXMgPSAyNTApICU+JSAgICN1c2luZyB0d2VlbnIhDQogIG11dGF0ZSh5ZWFyID0gcm91bmQodGltZSksIGlkID0gLmdyb3VwKSAlPiUNCiAgbGVmdF9qb2luKHBsb3RfZGF0YSwgYnkgPSBjKCJ0aW1lIiwgInkiLCAieCIsICJpZCIpKSAlPiUgDQogIHJlbmFtZShQcm9jZWRlbmNpYSA9IGlkKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IHgsIHkgPSB5LCBmcmFtZSA9IC5mcmFtZSwgY29sb3IgPSBQcm9jZWRlbmNpYSkpICsNCiAgZ2VvbV9wYXRoKGFlcyhncm91cCA9IFByb2NlZGVuY2lhLCBjdW11bGF0aXZlID0gVCksIHNpemUgPSAxLjEpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgdGhlbWUobGVnZW5kLmp1c3RpZmljYXRpb24gPSBjKDAuNSwgMC41KSwNCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gYygwLjcsIDAuNyksDQogICAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIlJhbGV3YXkiLCBzaXplID0gMTgpKSArDQogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBwYWwxKSArDQogIGxhYnMoeCA9ICJBw7FvIiwgeSA9ICJBcnJpYm9zIChUb25lbGFkYXMpIikgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDE5MjAsIDIwMTAsIDEwKSwgbWlub3JfYnJlYWtzID0gTlVMTCkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDM3NSwgNzUpLCBtaW5vcl9icmVha3MgPSBOVUxMKQ0KDQpnZ2FuaW1hdGUodHdlZW5fcGxvdCwgdGl0bGVfZnJhbWUgPSBGQUxTRSwgaW50ZXJ2YWwgPSAwLjAwMSwgIkxhbmRpbmdzX0NBLmdpZiIsIGFuaS53aWR0aCA9IDgwMCwgYW5pLmhlaWdodCA9IDUwMCkNCg0KYGBgDQoNCiMjIEFycmlib3MgTWV4aWNvDQoNCmBgYHtyfQ0KcmVhZF9jc3YoIkdTQl9MYW5kaW5nc19teC5jc3YiLCBjb2xfdHlwZXMgPSBjb2xzKCkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gQW5vLCB5ID0gQXJyaWJvcykpICsNCiAgZ2VvbV9saW5lKHNpemUgPSAxLjEsIGNvbG9yID0gIiMzNTdjNTciKSArDQogIGdlb21fcG9pbnQoc2l6ZSA9IDIsIGNvbG9yID0gIiMzNTdjNTciKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIHRoZW1lKGxlZ2VuZC5qdXN0aWZpY2F0aW9uID0gYygwLjUsIDAuNSksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9IGMoMC43LCAwLjcpLA0KICAgICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJSYWxld2F5Iiwgc2l6ZSA9IDIwKSkgKw0KICBsYWJzKHggPSAiQcOxbyIsIHkgPSAiQXJyaWJvcyBjb21lcmNpYWxlcyBkZSBNZXJvIEdpZ2FudGUgXG4oVG9uZWxhZGFzKSIpDQoNCmdnc2F2ZSgiTWV4LnRpZmYiLCBkcGkgPSA2MDAsIHdpZHRoID0gMTYsIGhlaWdodCA9IDgpDQoNCmBgYA0KDQojIEJpb2xvZ2ljb3MNCg0KYGBge3J9DQpiaW8gPC0gcmVhZC5jc3YoZmlsZSA9ICJyZWNvcmRzLmNzdiIsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGKSAlPiUgDQogIHNlbGVjdChTcGVjaWVzLCBTaXRlLCBTYWxlX3ByaWNlX3BrZywgRmlzaF9NYXJrZXRfbmFtZSwgQ2F0Y2hfc2l0ZSwgUGVzY2FfT2JqZXRpdm8sIFdlaWdodCwgVG90YWxfTGVuZ3RoLCBIZWFkX0xlbmd0aCwgV2VpZ2h0X25vdGVzLCBPdG9saXRocywgQ29sbGVjdG9yKSAlPiUgDQogIG1hZ3JpdHRyOjpzZXRfY29sbmFtZXModmFsdWUgPSB0b2xvd2VyKGNvbG5hbWVzKC4pKSkNCmBgYA0KDQoNCiMjIFJlZ2lzdHJvcyBwb3IgcGVyc29uYQ0KDQpgYGB7ciwgZmlnLndpZHRoID0gMTAsIGZpZy5oZWlnaHQgPSAxMH0NCmNvbGVjdG9yZXMgPC0gZ3JvdXBfYnkoYmlvLCBzaXRlLCBjb2xsZWN0b3IpICU+JSANCiAgY291bnQoKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IGNvbGxlY3RvciwgeSA9IG4pKSArDQogIGdlb21fY29sKGFlcyhmaWxsID0gc2l0ZSksIGNvbG9yID0gImJsYWNrIikgKw0KICBjb3dwbG90Ojp0aGVtZV9jb3dwbG90KCkgKw0KICB0aGVtZShsZWdlbmQuanVzdGlmaWNhdGlvbiA9IGMoMSwgMSksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9IGMoMC45LCAwLjkpKSArDQogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIpICsNCiAgZ2dFeHRyYTo6cm90YXRlVGV4dFgoKQ0KDQpwbG90bHk6OmdncGxvdGx5KGNvbGVjdG9yZXMpDQpgYGANCg0KYGBge3J9DQptb2RlbCA8LSBsbShsb2cxMCh3ZWlnaHQpfmxvZzEwKHRvdGFsX2xlbmd0aCksIGRhdGEgPSBiaW8pDQoNCnRpZHlfbW9kZWwgPC0gYnJvb206OnRpZHkobW9kZWwpDQpnbGFuY2VfbW9kZWwgPC0gYnJvb206OmdsYW5jZShtb2RlbCkNCg0KdGV4dF9saW5lYXIgPC0gYygibG9nMTAoVFcpID0gLTUuMDM2MyArIGxvZzEwKFRMKV4zLjExOTgiKQ0KDQp0ZXh0X2V4cCA8LSBjKCJUVyA9IDEwXigtNS4wMzYzKSooVExeMy4xMTk4KSIpDQpgYGANCg0KDQpgYGB7ciwgZmlnLndpZHRoID0gMTAsIGZpZy5oZWlnaHQgPSA1fQ0KDQpsaW5lIDwtIGRhdGEuZnJhbWUoeCA9IHNlcSgwLCAyMTAsIGJ5ID0gMSkpICU+JSANCiAgbXV0YXRlKHkgPSAxMF4oLTUuMDM2MykqKHheMy4xMTk4KSkNCg0KTFcgPC0gZmlsdGVyKGJpbywgIWlzLm5hKHRvdGFsX2xlbmd0aCksDQogICAgICAgICAgICAgIWlzLm5hKHdlaWdodCkpICU+JSAgDQogIG11dGF0ZSh3ZWlnaHRfbm90ZXMgPSBpZmVsc2UoaXMubmEod2VpZ2h0X25vdGVzKSwgIk5vIG5vdGVzIiwgd2VpZ2h0X25vdGVzKSwNCiAgICAgICAgIHNpdGUgPSBpZmVsc2UoaXMubmEoc2l0ZSksICJNaXNzaW5nIiwgc2l0ZSkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gdG90YWxfbGVuZ3RoLCB5ID0gd2VpZ2h0KSkgKw0KICBnZW9tX3BvaW50KHNpemUgPSAyLCBhbHBoYSA9IDAuNSwgYWVzKGNvbG9yID0gd2VpZ2h0X25vdGVzLCBzaXRlID0gc2l0ZSwgb3RvbGl0b3MgPSBvdG9saXRocykpICsNCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIsIGRpcmVjdGlvbiA9IC0xKSArDQogIGxhYnMoeCA9ICJUb3RhbCBMZW5ndGggKGNtKSIsIHkgPSAiVG90YWwgV2VpZ2h0IChLZykiKSArDQogIGdndGl0bGUodGV4dF9leHApICsNCiAgZ2VvbV9saW5lKGRhdGEgPSBsaW5lLCBhZXMoeCA9IHgsIHkgPSB5KSkNCg0KcGxvdGx5OjpnZ3Bsb3RseShMVykNCmBgYA0KDQoNCmBgYHtyLCBmaWcud2lkdGggPSAxMCwgZmlnLmhlaWdodCA9IDV9DQpMVyA8LSBmaWx0ZXIoYmlvLCAhaXMubmEodG90YWxfbGVuZ3RoKSwNCiAgICAgICAgICAgICAhaXMubmEod2VpZ2h0KSkgJT4lICANCiAgbXV0YXRlKHdlaWdodF9ub3RlcyA9IGlmZWxzZShpcy5uYSh3ZWlnaHRfbm90ZXMpLCAiTm8gbm90ZXMiLCB3ZWlnaHRfbm90ZXMpLA0KICAgICAgICAgc2l0ZSA9IGlmZWxzZShpcy5uYShzaXRlKSwgIk1pc3NpbmciLCBzaXRlKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBsb2cxMCh0b3RhbF9sZW5ndGgpLCB5ID0gbG9nMTAod2VpZ2h0KSwgY29sb3IgPSB3ZWlnaHRfbm90ZXMsIHNpdGUgPSBzaXRlLCBvdG9saXRvcyA9IG90b2xpdGhzLCBXZWlnaHQgPSB3ZWlnaHQsIExlbmd0aCA9IHRvdGFsX2xlbmd0aCkpICsNCiAgZ2VvbV9wb2ludChzaXplID0gMiwgYWxwaGEgPSAwLjUpICsNCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIsIGRpcmVjdGlvbiA9IC0xKSArDQogIGxhYnMoeCA9ICJUb3RhbCBMZW5ndGggKGNtKSIsIHkgPSAiVG90YWwgV2VpZ2h0IChLZykiKSArDQogIGdndGl0bGUodGV4dF9saW5lYXIpICsNCiAgZ2VvbV9hYmxpbmUoc2xvcGUgPSAzLjExOTgsIGludGVyY2VwdCA9IC01LjAzNjMpDQoNCnBsb3RseTo6Z2dwbG90bHkoTFcpDQpgYGANCg0KDQoNCg==